#
# Makefile for Broadcom BCM947XX boards
#
# Copyright (C) 2015, Broadcom Corporation. All Rights Reserved.
# 
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# 
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# $Id: Makefile 519628 2014-12-08 12:35:29Z $
#

ARCH ?= mips
CPU ?= bcmcore
BOARD := bcm947xx

# Standard options
CFG_MLONG64 := 0
CFG_LITTLE ?= 1
CFG_RELOC := 0
CFG_UNCACHED := 0
CFG_VAPI := 0 
CFG_BOARDNAME := "BCM947XX"
CFG_PCI ?= 0
CFG_ZLIB := 0
CFG_LZMA := 1
CFG_MINIMAL_SIZE := 1
CFG_CFLASH := 1
CFG_XIP := 0
CFG_ATE := 0
CFG_LDR_SREC := 0
CFG_LDR_ELF := 0
CFG_ROMBOOT ?= 0
CFG_SHMOO := 1

# BCM947XX options
CFG_BCMHND74K ?= 0
CFG_EMBEDDED_NVRAM := 1
CFG_OTPNVRAM := 0
CFG_FLASH := 1   # if CFG_XIP is set then CFG_FLASH must be set to 0
CFG_SFLASH := 1
CONFIG_APPS_LOGIC_NMRP := 1
CFG_NFLASH := 0
#ifeq ($(strip $(CFG_NFLASH)),1) #add by t&w sudenghai 2015-04-07 support for erasing
CFG_FLASH_ERASE := 1 
#endif
CFG_ET := 1
CFG_GMAC ?= 0	# CFG_GMAC requires CFG_ET
CFG_WL := 0
CFG_WLU := 0
CFG_SIM := 0	# build for Quickturn/Simulator
CFG_SIM_CONSOLE := 0	# with console
ifeq ($(strip $(CFG_PCI)),1)
CFG_BCM57XX := 1
CFG_ET := 0
else
CFG_BCM57XX := 0
endif
CFG_FAILSAFE_UPGRADE ?= 1   # Default on, can be turned off with CFG_FAILSAFE_UPGRADE=0
# CFG_DUAL_IMAGE :=1	# Default to off in compile time
CFG_PMU := 0
ifeq ($(strip $(CFG_PMU)),1)
# Will replace the MACRO below to CFG_SHMOO_CA9 after 53573 shmoo implemented.
CFG_SHMOO := 0
endif

CFLAGS += -I${BUILDDIR} -DPRODUCT=\"$(PRODUCT)\"

# read sdram params from nvram in internal builds                               
CFG_SDRAM_PARAM_FROM_EMBEDDED_NVRAM := 1

ifeq ($(strip $(CONFIG_APPS_LOGIC_NMRP)),1)
CFLAGS +=-DCFG_NMRP
endif

# HND source base
SRCBASE := $(shell cd ../../../.. && pwd)
TOP := $(SRCBASE)/cfe/

ifeq ($(strip $(CFG_RELOC)),0)

# Link binary in RAM
CFG_BOOTRAM := 1
ifeq ($(strip ${CFG_UNCACHED}),1)
  ifeq ($(strip $(CFG_XIP)),0)
    CFG_TEXT_START := 0xa0700000
  else
    CFG_DATA_START := 0xa0001000
  endif
else
  ifeq ($(strip $(CFG_XIP)),0)
    CFG_TEXT_START := 0x80e00000
  else
    CFG_DATA_START := 0x80001000
  endif
endif
# To generating ATE traces
ifeq ($(strip $(CFG_ATE)),1)
CFLAGS += -DBCM_ATE
endif

ifeq ($(strip $(CFG_DUAL_IMAGE)),1)
CFLAGS +=-DDUAL_IMAGE
endif
ifeq ($(strip $(CFG_FAILSAFE_UPGRADE)),1)
CFLAGS +=-DFAILSAFE_UPGRADE
endif
ifeq ($(strip $(CFG_FLASH_ERASE)),1)
CFLAGS +=-DCFE_FLASH_ERASE_FLASH_ENABLED=1
endif
ifeq ($(strip $(CFG_FLASH_FILL)),1)
CFLAGS +=-DFLASH_PARTITION_FILL_ENABLED=1
endif
ifeq ($(strip $(CFG_SDRAM_PARAM_FROM_EMBEDDED_NVRAM)),1)
CFLAGS +=-DSDRAM_PARAM_FROM_EMBEDDED_NVRAM
endif

ifeq ($(strip $(CFG_BCM_DEVINFO)),1)
CFLAGS += -DBCM_DEVINFO
endif

# Toolchain prefix 
LINUX_VERSION ?= 2_6
ifeq ($(strip $(LINUX_VERSION)),2_6)
    TOOLPREFIX := mipsel-uclibc-linux26-
else
    TOOLPREFIX := mipsel-linux-
endif

#PATH := $(PATH):/projects/hnd/tools/linux/bin:/projects/hnd/tools/linux/hndtools-mips-wrs-vxworks-3.2.3/bin

CFLAGS += -Ulinux -pipe

# Disable 4710A0 compiler workarounds if any
check_gcc = $(shell if $(GCC) $(1) -c -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)";  fi)
CFLAGS += $(call check_gcc, -m4710a0kern, )

# Disable PIC
CFLAGS-mips = -G 0 -mno-abicalls -fno-pic
CFLAGS-arm = -g -DSTANDALONE -O0 -D__KERNEL__
CFLAGS += $(CFLAGS-$(ARCH))

# Discard unused sections if supported
CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -static --gc-sections

else

# Locate data in RAM
CFG_BOOTRAM := 0
ifeq ($(strip ${CFG_UNCACHED}),1)
  CFG_DATA_START := 0xa0001000
else
  CFG_DATA_START := 0x80001000
endif

endif

# ARM override
ifeq ($(ARCH), arm)
CPU := armv7
CFG_NVRAM_SPACE := 65536
CFG_GMAC := 1
CFG_CFLASH := 0
CFG_FLASH := 0   # if CFG_XIP is set then CFG_FLASH must be set to 0
CFG_SFLASH := 1
CFG_TEXT_START := 0x00f00000

TOOLPREFIX := arm-uclibc-linux-2.6.36-

ASFLAGS := -D_LANGUAGE_ASSEMBLY
else
CFG_NVRAM_SPACE := 32768
endif

CFLAGS += -DMAX_NVRAM_SPACE=$(CFG_NVRAM_SPACE)

# handle "undefined reference to otp_read_word" problem
ifeq ($CFG_OTPNVRAM), 1)
CFLAGS +=  -DLOADADDR=$(CFG_TEXT_START)
endif


include $(TOP)/main/cfe.mk

ALL:
	${Q}cp $(SRCBASE)/cfe/cfez.bin ${ROMFS}
	
install:	
	${Q}cp $(SRCBASE)/cfe/cfez.bin ${ROMFS}
	${BUILDDIR}/vendor/broadcom/tools/nvserial -i ${ROMFS}/cfez.bin -o ${ROMFS}/cfez.out -s 1105 ${BUILDDIR}/driver/bcmdriver/shared/nvram/bcm947189_1+1RSDB_0523.txt
	${Q}dd if=${ROMFS}/cfez.out of=${ROMFS}/cfez.bin bs=64K count=1